#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Project: spd-sxmcc
"""
@author: lyndon
@time Created on 2019/1/3 13:39
@desc  带参数的函数
        不想要修改函数的调用方式，但是还想在原来的函数前后添加功能
      下面的timer就是一个装饰器函数，只是对一个函数有一些装饰作用
"""

from functools import wraps      #################

# 装饰带参数函数的装饰器
def wrapper(f):  # 装饰器函数
    @wraps(f)    ######################
    def inner(*args, **kwargs):
        # 装饰前执行
        ret = f(*args, **kwargs)    # 被装饰的函数
        # 装饰后执行
        return ret
    return inner

# func = timer(func)
# func()

@wrapper  # 语法糖 @装饰器函数名 相当于写了func = timer(func)
def func(a):
    '''
    这是一个功能
    :param a:
    :return:
    '''
    print('老板好同事好大家好', a)
    return '新年好'

def wahaha(a,b ):
    '''
    一个打印娃哈哈的函数
    :param a:
    :param b:
    :return:
    '''
    print('娃哈哈', a,b)
    return '新年好'


r = func(1)
print(r)

# 如果不导入wraps的话，这里就打印出来inner
# 如果导入warps，并且在装饰器的inner加上装饰的话，这里就可以打印出func的名字
print(func.__name__)
print(func.__doc__)

print(wahaha.__name__)   # 一个查看字符串函数名
print(wahaha.__doc__)

